Список изменений Standard Peripherals Library для МК (К)1986ВЕ9х,(К)1986ВЕ1Т,(К)1986ВЕ3Т,(К)1986ВЕ4У,(К)1901ВЦ1Т.

--------------------------------------------------------------------------------

v.2.2.0 21/12/2024

Добавлено:
    1. Добавлена поддержка микроконтроллеров К1986ВЕ9x и К1986ВЕ1x, поставляемых по ТСКЯ.431000.002ТУ.
    2. Для МК К1986ВЕ9x и К1986ВЕ1x, поставляемых по ТСКЯ.431000.002ТУ, в функцию SystemInit() добавлена опции установки коэффициентов LDO_TRIM[2:0], HSI_TRIM[5:0] и LSI_TRIM[4:0] согласно значениям в производственной информации. Опция по умолчанию включена, управляется макроопределением FACTORY_DATA_SYSTEM_INIT в файле MDR32F9Qx_config.h. При использовании данной опции для микросхем К1986ВЕ1x, поставляемых по ТСКЯ.431000.002ТУ, также производится сброс поля Trim[4:3] регистра MDR_BKP->REG_0E.
    3. Для МК К1986ВЕ1x, поставляемых по ТСКЯ.431000.002ТУ, в драйверах ARINC429R и ARINC429T добавлены новые регистры.
    4. В заголовочные файлы МК:
        - добавлен раздел Memory Map с определениями базовых адресов.
        - добавлены определения битов регистра MDR_RST_CLK->PER_CLOCK.
    5. В драйвере EEPROM добавлены функции пакетного программирования (EEPROM_ProgramWordArrayBurst()) и чтения (EEPROM_ReadWordArrayBurst()).
    6. В драйвере DMA добавлена возможность точечно управлять объемом памяти ОЗУ, выделяемым под управляющие структуры (первичная и альтернативная) контроллера DMA.
    7. В заголовочных файлах микроконтроллеров и startup-файлах добавлены комментарии о возможности программного вызова прерывания NMI.

Изменено:
    1. В файле MDR32F9Qx_config.h дефайн __RAMFUNC для компилятора Keil определяет __attribute__((section("EXECUTABLE_MEMORY_SECTION"))).
    2. В драйвере COMP в функции COMP_CVRefScaleConfig() исправлено маскирования бит COMP_CFG_CVRR.
    3. В драйвере RST_CLK:
        - скорректировано поведение функции RST_CLK_DeInit() - убрана модификация регистра MDR_BKP->REG_0F, настройка регистра MDR_BKP->REG_0E осуществляется до или после сброса регистров контроллера тактовых частот в зависимости от изначальной частоты.
        - скорректировано поведение функции RST_CLK_WarmDeInit() (и как следствие функции RST_CLK_DeInit()) - регистр MDR_RST_CLK->RTC_CLOCK не сбрасывается, поскольку от него может зависеть поведение RTC.
        - для МК К1986ВЕ9x и К1986ВЕ1x, поставляемых по ТСКЯ.431000.002ТУ, убраны коэффициенты умножения для CPU PLL и USB PLL, равные 2 и 3, согласно спецификации.
        - для МК К1986ВЕ1x, поставляемых по ТСКЯ.431000.002ТУ, добавлены функции RST_CLK_DMADone_GetFlagStatus(), RST_CLK_DMADone_GetStatus() и RST_CLK_DMADone_ClearFlags().
    4. В драйвере EEPROM:
        - удалены атрибуты __attribute__((section("EXECUTABLE_MEMORY_SECTION"))) для функций, использующих __RAMFUNC;
        - для МК К1986ВЕ9x и К1986ВЕ1x, поставляемых по ТСКЯ.431000.002ТУ, добавлена защита от стирания и программирования производственной информации, расположенной в секторе A информационной области Flash-памяти.
          Использование защиты настраивается в файле MDR32F9Qx_config.h, макроопределение USE_EEPROM_FACTORY_DATA_PROTECTION (по умолчанию выбрано);
        - оптимизированы функции EEPROM_ReadHalfWord() и EEPROM_ReadByte() - для чтения слова используется вызов функции EEPROM_ReadWord();
        - скорректированы временные параметры EEPROM с учетом разброса частоты генератора HSI;
        - скорректированы функции EEPROM_ProgramHalfWord() и EEPROM_ProgramByte() - добавлено выравнивание адреса по границе слова перед передачей адреса в функции EEPROM_ReadWord() и EEPROM_ProgramWord();
        - скорректирована функция EEPROM_ErasePage() - скорректировано формирование адреса секторов А-D (для всех МК, кроме (К)1986ВЕ4У);
        - исправлена опечатка в названии макроопределений IS_EEPROM_TWO_BYTE_ALIGNED и IS_EEPROM_FOUR_BYTE_ALIGNED;
        - скорректированы комментарии для Doxygen.
    5. В драйвере USB:
       - для МК К1986ВЕ9x и К1986ВЕ1x, поставляемых по ТСКЯ.431000.002ТУ, убраны коэффициенты умножения для USB PLL, равные 2 и 3, согласно спецификации.
    6. В драйвере UTILS:
        - в драйвере DELAY скорректирован расчет констант для округления в большую сторону;
        - удалены атрибуты __attribute__((section("EXECUTABLE_MEMORY_SECTION"))) для функций, использующих __RAMFUNC.
    7. Для МК (К)1986ВЕ3Т в драйвере ARINC429R разрешен досуп к функциям ARINC429R_ITMaskConfig() и ARINC429R_ReceiveDataDirect().
    8. В файлах просмотра периферии SVD:
        - для микросхем (К)1986ВЕ1x и (К)1986ВЕ3Т актуализированы регистры блоков ARINC429R и ARINC429T;
        - для МК К1986ВЕ1x, поставляемых по ТСКЯ.431000.002ТУ, добавлен регистр DMA_DONE_STICK;
        - исправлены опечатки.
    9. В драйвере PORT:
        - в функции PORT_DeInit() изменен порядок записи в регистры для учета состояния регистра RXTX при ANALOG = 0;
        - в функции PORT_Init() изменен порядок записи в регистры и добавлен предварительный сброс регистров OE, FUNC и ANALOG для учета состояния регистра RXTX при ANALOG = 0.
    10. Исправлен порядок инициализации в примерах IWDG.
    11. Исправлено тактирование PORTC в примере RST_CLK_CPU_Clock для МК (К)1986ВЕ92.
    12. Изменена работа примеров EEPROM для учета защиты сектора A информационной Flash-памяти микросхем К1986ВЕ9x и К1986ВЕ1x, поставляемых по ТСКЯ.431000.002ТУ.

Удалено:
    1. Удалена legacy-поддержка версии SPL 1.5.3.

--------------------------------------------------------------------------------

v.2.1.1 02/02/2024

Изменено:
    1. В драйвере EEPROM исправлено возвращаемое функцией EEPROM_GetLatency() значение.
    2. В драйвере ADC в функцях ADC1_LevelsConfig() и ADC2_LevelsConfig() изменен порядок записи в регистры - уровни настраиваются до включения и после отключения.
    3. В драйвере ETHERNET в функции ETH_PHYCmd() исправлена двойная запись регистра PHY_Control при использовании WORKAROUND_MDR32F9QX_ERROR_ETH_PHY_10BASE_T_DATA_INVERSION.

--------------------------------------------------------------------------------

v.2.1.0 07/07/2023

Добавлено:
    1. Для МК 1986ВЕ9x и МК 1901ВЦ1Т в функцию SystemInit() добавлена запись в регистр SCB->VTOR адреса таблицы векторов прерываний, указанного в startup-файле.
    2. В файле MDR32F9Qx_config.h добавлено макроопределение MDR32Fx_SPL_VERSION с текущей версией SPL.
    2. Добавлен файл MDR32F9Qx_asm.S, содержащий ассемблерную функцию задержки и функцию очитки кеша для МК 1986ВЕ1Т, 1986ВЕ3Т.
    3. В драйвере DMA:
        - добавлена функция DMA_ChannelReloadCycle() для изменения общего количества передач DMA для выбранного канала.
        - добавлено объявление таблицы каналов DMA DMA_ControlTable в заголовочном файле.
    4. В драйвере TIMER:
        - добавлены бит CHy_CNTRL.WR_CMPL1 и функция TIMER_GetChnWriteComplete1();
        - добавлены бит CHy_CNTRL2.EV_DELAY и функция TIMER_ChnEventDelay_Cmd().
    5. В драйвере POWER:
        - добавлена функция POWER_PVBDenable() для 1986ВЕ1Т, 1986ВЕ3Т, 1986ВЕ4У;
        - добавлен двойной сброс флагов в функциях POWER_DeInit() и POWER_ClearFlag() согласно примечанию в документации.
    6. Добавлен драйвер UTILS, содержащий:
        - драйвер DELAY, который реализует блокирующую задержку:
            - при инициализации драйвера (DELAY_Init()) необходимо указать режим работы: программная задержка, задержка на основе таймера SysTick, TIMERx (для МК 1986ВЕ1, 1986ВЕ3, 1986ВЕ9x и 1901ВЦ1Т) или DWT (для МК 1986ВЕ9x и 1901ВЦ1Т);
            - при инициализации драйвера (DELAY_Init()) для расчета констант используется тактовая частота из переменной SystemCoreClock, поэтому перед вызовом DELAY_Init() необходимо настроить требуемую частоту тактирования ядра и вызвать SystemCoreClockUpdate();
            - для применения доступны функции задержки: DELAY_WaitUs() и DELAY_WaitMs();
        - функцию STDIO_Init(), которая инициализирует UARTx в соответствии с указанными параметрами блока _USE_DEBUG_UART_ в MDR32F9Qx_config.h для стандартного ввода/вывода.
    7. В драйвере ETHERNET:
        - добавлена функция ETH_CheckMode10BaseT() для обхода ошибки errata "Инверсия передаваемых данных в режиме 10Base-T HD/FD после сброса EthernetPHY";
        - добавлены функции ETH_GetPHYAutonegStatus(), ETH_GetRxFrameCount(), ETH_DecrementRxFrameCount(), ETH_GetTxBufferFreeSize().

Изменено:
    1. В файле MDR32F9Qx_config.h закомментировано макроопределение MDR_LEGACY_SUPPORT, с помощью которого осуществляется совместимость с версией 1.5.3. ВНИМАНИЕ: В следующей версии совместимость с версией 1.5.3 будет убрана.
    2. В драйвере ADC:
        - отредактированы типы аргументов функций, сложение заменено логическим "ИЛИ", изменено поведение функций ADC_ITConfig()/ADC1_ITConfig()/ADC2_ITConfig() и ADC_GetITStatus()/ADC1_GetITStatus()/ADC2_GetITStatus() в соответствии с их аргументами;
        - при модификации регистров ADC1_STATUS и ADC2_STATUS добавлено маскирование битов флагов, очищаемых записью 0, для предотвращения их ложного сброса;
        - скорректированы некоторые определения, используемые для assert_param().
    3. В драйвере ADCIU для 1986ВЕ4У скорректированы определения, используемые для assert_param().
    4. В драйвере ARINC429R:
        - отредактирован типы аргумента ARINC429R_IT функции ARINC429R_ITConfig() с ARINC429R_IT_Def на uint32_t;
        - скорректировано определение IS_ARINC429R_BRG, используемое для assert_param().
    5. В драйвере AUDIO:
        - поля ADGain и DAGain в структуре AUDIO_IP_InitTypeDef и функциях AUDIO_IP_SetADGain(), AUDIO_IP_SetDAGain() заменены на энумерации;
        - исправлены значения AUDIO_IP_ADC_INPUT_AMPLIFIER_LEVEL_6_DB и AUDIO_IP_ADC_INPUT_AMPLIFIER_LEVEL_12_DB энумерации AUDIO_IP_ADC_Input_Ampl.
    6. В драйвере BKP:
        - для МК 1986ВЕ1, 1986ВЕ3 для функции BKP_EnterSTANDBYMode() добавлено примечание "Рекомендуется не использовать";
        - скорректировано поведение функции BKP_DeInit() - в регистр REG_0F также прописываются значения по умолчанию для полей тримминга LSI и HSI;
        - для функции BKP_EnterSLEEPMode() добавлен барьер синхронизации данных после записи 1 в бит SLEEP;
        - изменен тип аргумента BKP_RTC_IT_Source функции BKP_RTC_ITConfig с BKP_RTC_IT на uint32_t.
        - скорректировано определение IS_RTC_CALIBRATION, используемое для assert_param().
    7. В драйвере EBC скорректированы некоторые определения, используемые для assert_param().
    8. В драйвере EEPROM:
        - функция задержки заменена с реализации на C на реализацию на Asm (через драйвер UTILS), исправлена длительность задержек в функциях EEPROM_ErasePage(), EEPROM_EraseAllPages() и EEPROM_ProgramWord();
        - для МК 1986ВЕ4У в функции EEPROM_EraseBlock() изменены возможные значения аргумента EEPROM_Mem_Bank BankSelector - EEPROM_Main_Bank_Select и EEPROM_All_Banks_Select вместо EEPROM_Main_Bank_Select и EEPROM_Info_Bank_Select.
    9. В драйвере ETHERNET:
        - исправлена ошибка при работе в режиме FIFO;
        - реализовано отключение прерываний на время записи пакета для передачи в автоматическом режиме в функции ETH_SendFrame() - в противном случае при возникновении прерывания может быть передан некорректный пакет;
        - в функции ETH_init() исправлено игнорирование поля ETH_Short_Frames_Reception структуры инициализации;
        - в функции ETH_PHYCmd() при включении PHY добавлен вызов функции ETH_CheckMode10BaseT() для обхода ошибки errata. Использование обхода настраивается в MDR32F9Qx_config.h, макрос WORKAROUND_MDR32F9QX_ERROR_ETH_PHY_10BASE_T_DATA_INVERSION (по умолчанию выбран);
        - в структуру инициализации ETH (ETH_InitTypeDef) добавлена настройка делителя частоты MDC - ETH_MDIO_MDC_Prescaler. Функция ETH_StructInit() устанавливает делитель MDC равным 64. Соответствующим образом скорректированы функции ETH_Init(), ETH_ReadPHYRegister() и ETH_WritePHYRegister();
        - исправлена ошибка при записи в регистры PHY (функция ETH_WritePHYRegister()).
    10. В драйвере MIL_STD_1553 исправлено ошибочное выставление битов [31:16] регистра CONTROL при вызове функции MIL_STD_1553_Cmd().
    11. В драйвере PORT:
        - для МК 1901ВЦ1Т в функциях PORT_ResetBits() и PORT_WriteBit() сброс выполняется записью в регистр CLRTX вместо модификации регистра RXTX;
        - в функции PORT_Init() исправлено маскирование регистров для выводов, совмещенных с JTAG/SWD.
    12. В драйвере POWER исправлено макроопределение IS_POWER_FLAGS() для assert_param();
    13. В драйвере TIMER:
        - скорректированы комментарии;
        - для МК 1986ВЕ1 и МК 1986ВЕ3 разрядность TIMER_Prescaler в структуре TIMER_CntInitTypeDef изменена с 16 бит на 32 бита;
        - в функции TIMER_ChnCompare1Config() для аргумента UpdateMode исправлен макрос для assert_param;
        - в функции TIMER_ChnOutStructInit() добавлена инициализация номера канала;
        - в TIMER_ChnInitTypeDef добавлен TIMER_CH_EventDelay, скорректированы функции TIMER_ChnInit() и TIMER_ChnStructInit();
        - сложение заменено логическим "ИЛИ".
    14. В драйвере RST_CLK:
        - скорректированы макроопределения, используемые для assert_param();
        - скорректировано поведение функций RST_CLK_DeInit() и RST_CLK_WarmDeInit().
    15. В драйвере UART:
        - скорректированы макроопределения, используемые для assert_param();
        - в функции UART_Init() исправлена ошибка вычисления частоты и настройки полей UART_WordLength, UART_StopBits, UART_Parity и UART_FIFOMode;
        - в функции UART_DeInit() убрана запись в регистр FR;
        - в функции UART_ClearITPendingBit() чтение-модификация-запись регистра ICR заменена на прямую запись;
        - в функции UART_StructInit() стандартное значение 5бит заменено на 8бит.
    16. В файлах просмотра периферии SVD:
        - для всех МК с блоком USB скорректированы адреса регистров блока USB;
        - добавлены энумерации некоторых полей регистров блока MDR_RST_CLK;
        - добавлены все прерывания;
        - для МК 1986ВЕ92 исключены поля, связанные с DAC1 - не реализован в микроконтроллере;
        - для МК 1986ВЕ1 и МК 1986ВЕ3 исправлена разрядность регистров MDR_TIMER->PSG c 16 бит на 32 бита.
    17. Доработки по примерам:
        - использование внешнего источника частоты при работе с интерфейсами, исправление использования флагов ожидания для частот и т.д.
        - в примере IWDG_Independent исправлена инициализация IWDG;
        - для МК 1986ВЕ4У переработан пример UART_WordSend по аналогии с примерами для остальных МК;
        - примеры UART Printf заменены на RetargetSTDIO с аналогичным функционалом;
        - в примерах CAN добавлена настройка выводов для блока CAN;
        - для МК 1986ВЕ4У в примере SPI_FullDuplex убрана настройка незадействованных блоков, дополнена настройка выводов, добавлена логика передачи/приема.
        - для МК 1986ВЕ3 в примере LED исправлено смещение (position) для функции LED_PutString(), убраны незадействованные файлы обработчиков прерываний и функции отладки через UART, доработана настройка тактирования МК.
        - в примерах, где задействован режим PingPong блока DMA, обработчик прерывания DMA переделан и использованием новых функций;
        - доработаны примеры BKP RTC;
        - для МК 1986ВЕ1, 1986ВЕ3 примеры BKP STANDBY заменены на BKP SLEEP.

Удалено:
    1. Удален файл MDR32F9Qx_eeprom_cache.S для МК 1986ВЕ9х,1986ВЕ1Т,1986ВЕ3Т,1901ВЦ1Т, заменен на MDR32F9Qx_asm.S.
    2. В драйвере DMA и конфигурационном файле MDR32F9Qx_config.h убрана возможность смены числа каналов при использовании альтернативных каналов.

--------------------------------------------------------------------------------

v.2.0.2 24/09/2021

Изменено:
    1. Исправлены ошибки в примерах и SPL при использовании определения USE_ASSERT_INFO, внесены улучшения для функции assert_failed() в примерах и xxx_config.h файле.
    2. Исправлена ошибка в заголовочном файле MDR1986BE4.h при использовании C++. Внимание: поддержка C++ в SPL не заявляется.

--------------------------------------------------------------------------------

v.2.0.1 18/08/2021

Изменено:
    1. Исправлены ошибки в примерах при использовании определения _USE_DEBUG_UART_
    2. Изменен пример CRC для 1986ВЕ4У - добавлена возможность загрузки 16 и 32 битных данных, обновлена функция настройки частоты с учётом LDO и задержек Flash.

--------------------------------------------------------------------------------

v.2.0.0 06/08/2021

Добавлено:
    1. Тестовая поддержка МК 1986ВЕ94.
    2. Поддержка разных ревизий МК 1986ВЕ1Т и 1986ВЕ3Т, учитывающая различия между ревизиями.
    3. Файлы-шаблоны обработчиков прерываний для МК 1986ВЕ9x, 1986ВЕ1Т, 1986ВЕ3Т, 1901ВЦ1Т, 1986ВЕ4У.
    4. Пример UART Interrupt для МК 1986ВЕ4У.
    5. Пример Terminal Device_REV6 для МК 1986ВЕ1Т ревизии 6, демонстрирующий работу МКИО в режиме ОУ.
    6. Добавлены недостающие регистры SETTX, CLRTX и RDTX для МК 1986ВЕ1Т, 1986ВЕ3Т, 1901ВЦ1Т, 1986ВЕ4У в заголовочные файлы.
    7. Функция отчистки кэша данных для МК 1986ВЕ9x, 1986ВЕ1Т, 1986ВЕ3Т, 1901ВЦ1Т, 1986ВЕ4У.
    8. Пример UART Printf для МК 1986ВЕ9x, 1986ВЕ1Т, 1986ВЕ3Т, 1986ВЕ4У.

Изменено:
    1. Реорганизована иерархическая структура папок.
    2. Заменен пример Ethernet_X2 для МК 1986ВЕ3Т.
    3. Функции для работы с BKP перенесены из драйвера POWER в драйвер BKP (соответственно перенесены примеры работы блока POWER в примеры работы с блоком BKP).
    4. Многочисленные изменения и исправления ошибок в файлах поддержки МК 1986ВЕ9x, 1986ВЕ1Т, 1986ВЕ3Т, 1901ВЦ1Т, 1986ВЕ4У, ломающие обратную совместимость.
       ВНИМАНИЕ: Для сохранения обратной совместимости введена поддержка старых версий с помощью макроопределения MDR_LEGACY_SUPPORT (со значением 153).
    5. Большинство аргументов функций в файлах поддержки МК 1986ВЕ9x, 1986ВЕ1Т, 1986ВЕ3Т, 1901ВЦ1Т, 1986ВЕ4У заменены на энумерации.
    6. Исправления и дополнения к примерам для МК 1986ВЕ9x, 1986ВЕ1Т, 1986ВЕ3Т, 1986ВЕ4У.
    7. Доработан заголовочный файл MDR1986VE3.h.

Удалено:
    1. Файл MDR32F9Qx_lib.h удален и объединён с файлом MDR32F9Qx_config.h.
    2. Файл MDR32F9Qx_board.h удален, выбор МК осуществляется в файле MDR32F9Qx_config.h.
    3. Удалены дублирующиеся примеры работы DMA с периферийными блоками (DMA-TIMER, DMA_SSP).

--------------------------------------------------------------------------------

v.1.5.3 15/10/2019
Устранение ошибок, внесение нового функционала.

--------------------------------------------------------------------------------

v.1.0.0
Первоначальная версия.


